/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package service;

import controladoresJpa.ProjetistaJpaController;
import controladoresJpa.exceptions.IllegalOrphanException;
import controladoresJpa.exceptions.NonexistentEntityException;
import controladoresJpa.exceptions.PreexistingEntityException;
import java.io.Serializable;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import model.Projetista;

/**
 * Módulo Gerência
 * Classe Service para construção de métodos de acesso para classe Projetista
 * @author Eduardo, Maylon e Kamilla
 */
public class ProjetistaService implements Serializable{
    
    private ProjetistaJpaController jpa;
    private static Logger log = Logger.getLogger(ProjetistaService.class.getName());
    
    /**
     * Método Construtor
     */
    public ProjetistaService() {
        jpa = new ProjetistaJpaController();
    }
        /**
         * Método responsável por salvar e atualizar uma Participacao do Modelo Entidade-Relacionamento.
         * @param objeto atributo a ser salvo.
         * @throws NonexistentEntityException exceção NonexistentEntityException.
         * @throws Exception exceção.
         */
        public void salvar(Projetista objeto)  {
            if(this.encontrado(objeto))
                try {
            jpa.edit(objeto);
            log.fine("Projetista: "+ objeto.getNome()+", "+objeto.getEMail()+" editado");
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(ProjetistaService.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(ProjetistaService.class.getName()).log(Level.SEVERE, null, ex);
        } 
            else
                try {
            jpa.create(objeto);
            log.fine("Projetista: "+ objeto.getNome()+", "+objeto.getEMail()+" salvo com sucesso");
        } catch (PreexistingEntityException ex) {
            Logger.getLogger(ProjetistaService.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(ProjetistaService.class.getName()).log(Level.SEVERE, null, ex);
        }
        }
        
         /**
         * Método responsável por excluir uma Participacao do Modelo Entidade-Relacionamento.
         * @param objeto atriubuto a ser excluido.
         * @throws NonexistentEntityException exceção NonexistentEntityException.
         */
        public void excluir(Projetista objeto) {
            if(this.encontrado(objeto))
                try {
            jpa.destroy(objeto.getEMail());
            log.fine("Projetista: "+ objeto.getNome()+", "+objeto.getEMail()+" Excluido");
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(ProjetistaService.class.getName()).log(Level.SEVERE, null, ex);
        } 
        }

        /**
         * Método para listar os projetistas já existentes
         * @return 
         */
        public List<Projetista> recarregar() {
            return jpa.findProjetistaEntities();
        }
        
    
        /**
         * Método para procura de um projetista
         * @param objeto
         * @return 
         */
     public boolean encontrado(Projetista objeto){
            List lst = jpa.findProjetistaEntities();
            Iterator i = lst.iterator();
            boolean achei = false;
            while(!achei && i.hasNext()){
                Projetista a = (Projetista) i.next();
                if(objeto.getEMail().equals(a.getEMail())){
                    log.fine("Projetista: "+ objeto.getNome()+", "+objeto.getEMail()+" encontrado");
                    return true;
                }        
            }
            log.fine("Projetista: "+ objeto.getNome()+", "+objeto.getEMail()+" Não encontrado");
            return false;
        

}
     /**
      * Método para recuperaçao de projetistas no BD
      * @param objeto
      * @return 
      */
       public Projetista recuperarDoBancoDados(Projetista objeto){
            List lst = jpa.findProjetistaEntities();
            Iterator i = lst.iterator();
            boolean achei = false;
            while(!achei && i.hasNext()){
                Projetista a = (Projetista) i.next();
                if(objeto.getEMail().equals(a.getEMail())){
                    log.fine("Projetista: "+ objeto.getNome()+", "+objeto.getEMail()+" encontrado no banco de dados");
                    return a;
                }
                    
            }
            log.fine("Projetista: "+ objeto.getNome()+", "+objeto.getEMail()+" não encontrado no banco de dados");
            return null;
        }
}
